<?php

namespace app\common\controller;

use think\Controller;

class Home extends Controller
{
    //设置全局属性 不需要登录的都放在这里
    protected $NoLoginUser = [];
    //构造函数
    public function __construct()
    {
        //继承父级构造函数
        parent::__construct();

        //引用用户模型
        $this->UserModel = model('User.User');

        //首先去掉数组中为空的元素
        $this->NoLoginUser = array_filter($this->NoLoginUser);

        if (empty($this->NoLoginUser)) {
            //需要登录
            $this->isLogin();
        } else {
            //所有方法
            $all = '*';

            //获取当前方法
            $action = $this->request->action();

            if (!in_array($all, $this->NoLoginUser) && !in_array($action, $this->NoLoginUser)) {
                //需要登录
                $this->isLogin();
            }
        }
    }

    //判断是否登录
    public function isLogin()
    {
        //获取cookie
        $LoginUser = cookie('LoginUser');

        //如果cookie不为空
        if (!empty($LoginUser)) {
            $id = isset($LoginUser['id']) ? $LoginUser['id'] : 0;

            //拿到cookie里面的id去数据库里面查询是否有该用户
            $User = $this->UserModel->with(['provinces', 'citys', 'districts'])->find($id);
            // $User = $this->UserModel->fetchSql()->with(['province', 'citys', 'district'])->find($id);

            //查询不到该用户
            if (!$User) {
                $this->error('非法登录', url('home/index/login'));
                exit;
            }

            //设置所有的控制器都能使用(所有控制器里面可用)
            $this->LoginUser = $User;

            //全局模板赋值(所有模板里面可用)
            $this->assign('LoginUser', $User);
        } else {
            $this->error('请登录', url('home/index/login'));
            exit;
        }
    }

    /**
     * 返回数据的方法
     * @access protected
     * @param mixed  $msg    提示信息
     * @param mixed  $data   返回的数据
     * @param mixed  $code   返回的状态码
     * @return void
     */
    public function back($msg = '未知信息', $data = null, $code = 1)
    {
        //一般接口的数据类型是json xml 把返回数据封装一个数组

        $result = [
            'msg' => $msg,
            'data' => $data,
            'code' => $code,
        ];

        //数据转成json
        echo json_encode($result);
        exit;
    }

    /**
     * 操作失败跳转的快捷方法
     * @access protected
     * @param mixed  $msg    提示信息
     * @param mixed  $data   返回的数据
     * @param mixed  $code   返回的状态码
     * @return void
     */

    public function warning($msg = '未知信息', $data = null, $code = 0)
    {
        $this->back($msg, $data, $code);
        exit;
    }

    /**
     * 操作成功跳转的快捷方法
     * @access protected
     * @param mixed  $msg    提示信息
     * @param mixed  $data   返回的数据
     * @param mixed  $code   返回的状态码
     * @return void
     */
    public function finish($msg = '未知信息', $data = null, $code = 1)
    {
        $this->back($msg, $data, $code);
        exit;
    }
}
